package com;

import org.junit.Test;

/**
 * =================================
 * <p>
 * Created by cjj on 18-10-15.
 * <p>
 * 描述: 试探算法
 */

public class HeuristicAlgorithm {

    //
    int n = 7;
    //
    int m = 9;
    int number[] = new int[n];

    int range[] = new int[m];

    @Test
    public void function() {

        for (int i = 0; i < n; i++) {
            number[i] = 0;
        }
        for (int i = 0; i < m; i++) {
            range[i] = i + 1;
        }
        //heuristic(0, 1);
        heuristic2(n, m);

    }

    /**
     * @n 多少位 (从1开始)
     * @m 每位范围（从1开始）
     * 彩票中奖号码试探算法（暴力算法） 算法复杂度（m的n次方）
     */
    public void heuristic(int position, int rg) {

        int i, j;
        for (i = 0; i < m; i++) {
            number[position] = range[rg - 1];
            if (position < this.n - 1) {
                heuristic(position + 1, i + 1);
            } else {
                for (j = 0; j < this.n; j++) {
                    System.out.print(number[j]);
                    System.out.print(" ");
                }
                System.out.println();
            }
        }
    }

    /**
     * @n 多少位 (从n开始)
     * @m 每位范围（从m开始）
     * 彩票中奖号码试探算法（暴力算法） 算法复杂度（m的n次方）
     */
    public void heuristic2(int position, int rg) {

        int i, j;
        for (i = rg; i >= position; i--) {
            number[position-1] = range[i - 1];
            if (position>1) {
                heuristic2(position - 1, i - 1);
            } else {
                for (j = 0; j < this.n; j++) {
                    System.out.print(number[j]);
                    System.out.print(" ");
                }
                System.out.println();
            }
        }
    }


}
